package com.study.algorithm.binarytree;

/**
 * 114. 二叉树展开为链表
 */
public class Flatten {
    public void flatten(TreeNode root) {
        if (root == null) {
            return;
        }

        // 递归展开左右子树
        flatten(root.left);
        flatten(root.right);

        // 保存当前的右子树
        TreeNode temp = root.right;

        // 将左子树移到右边
        root.right = root.left;
        root.left = null;  // 左指针置空

        // 找到新右子树的最右节点
        TreeNode current = root;
        while (current.right != null) {
            current = current.right;
        }

        // 将原来的右子树接在后面
        current.right = temp;
    }
}
